var dado;
var escala=0.1;

function listarRasters(id){
              
    $.ajax({
        type: "POST",
        url: "php/src/control/control.raster.php",
        data: ({
            func: "list"
        }),
        dataType: "json",
        context: document.body,              
          
        success: function(data){      
            for (var i in data){         
                $(id).addOption(data[i].raster, i, false);
            }
        }        
    });
}

function obterDadosEspaciais(func, filtro){        
       
    $.ajax({
        type: "POST",
        url: "php/src/control/control.multipoligono.php",
        data: ({
            func: func,
            filtro: filtro,
            extDados: extensaoHistorico[extensaoHistorico.length-1]
        }),
        dataType: "json",
        context: document.body,              
          
        success: function(data){

            if(data == null)
                return;
            
            desenharMultiPoligono(func, data);
        },
        beforeSend: function () {
            $('#loading').show();
        },
        complete: function () {
            $('#loading').hide();
        } 
    });
}

function obterRaster(func, filtro){
       
    $.ajax({
        type: "POST",
        url: "php/src/control/control.raster.php",
        data: ({
            func: func,
            filtro: filtro
        }),
        dataType: "json",
        context: document.body,              
          
        success: function(data){
              
            if(data == null)
                return;  
              
            desenharRaster(func, data);              
        }
        ,
        beforeSend: function () {
            $('#loading').show();
        },
        complete: function () {
            $('#loading').hide();
        }         
    });
}

function desenharRaster(func, data){
    if(func == "obterRaster"){                    
        dado = data;
        desenhaGrid(data,0.1);
    }
    if(func == "obterGeoRasters"){
        canvas.width = 500;
        canvas.height = 320;
                
        for(var i in data){
            desenhaGeoGrid(data[i]);
        }
    }          
}

function desenharMultiPoligono(func, data){      

    if(func == "obterDadosEspaciais"){
        context.fillStyle = "#F5DEB3";
    }

    if(func == "marcarPonto" || func == "zoomPonto"){
        context.fillStyle = "#F4A460";
        mostrarDados(data);
    }    
    if((func == "zoomSelecao") || (func == "zoomPonto")){
        canvas.width = canvas.width;
        context.fillStyle = "#F5DEB3";
    }
    
    if(func == "zoomSelecao"){
        extensaoHistorico.push(data[0]);
        apagarDados();
    }
    
    for (var j in data){
        var multipoligono = data[j];
        for(var i in multipoligono.poligonos){
            desenhaPoligono(multipoligono.poligonos[i]);                    
        }
        configContext(1,true,true);
    }
}

function desenhaPoligono(poligono){
    
    context.beginPath();
    context.moveTo(poligono.pontos[0].x,poligono.pontos[0].y);  

    for (var i in poligono.pontos){
        context.lineTo(poligono.pontos[i].x,poligono.pontos[i].y);
    }
}

function desenhaGeoGrid(data){    

    var color = 0;
    
    var colors = data.weight.split(" ");
    var xpos = data.celula.xmin; 
    var ypos = data.celula.ymin;
    var size = data.celula.xmax - data.celula.xmin;

    for(var i=0; i<data.dy; i++){ 
        for(var j=1; j<=data.dx; j++){            
            defineCores4CRS(colors[color++]);
            if(colors[color] != 0){
                context.fillRect(xpos,ypos,size,size);
            }
            xpos+=size;
        }
        ypos-=size;
        xpos = data.celula.xmin;
    }
    
    desenhaPoligono(data.poligono[0]);
    context.strokeStyle = "#F00";
    configContext(0.5,true,false);    
}

function desenhaGrid(data,scale){

    canvas.width = (data.dx * size)*scale;
    canvas.height = (data.dy * size)*scale;
    context.scale(scale,scale);

    var color = 0;

    var colors = data.weight.split(" "); 
    var xpos = 0; 
    var ypos = (data.dy * size) - size;
    var size = data.size;

    for(var i=0; i<=data.dy; i++){
        for(var j=1; j<=data.dx; j++){
            defineCores4CRS(colors[color++]);
            context.fillRect(xpos,ypos,size,size);
            context.strokeRect(xpos,ypos,size,size);
            xpos+=size;
        }
        ypos-=size;
        xpos = 0;
    }    
    desenhaPoligono(data.poligono[0]);
    context.strokeStyle = "#F00";
    configContext(5,true,false);
}

function zoomEscala(tipo){
    
    if(tipo == '-' && escala > 0.1){
        escala-=0.05;
    }
    
    if(tipo == '+'){
        escala+=0.05;
    }
    
    if(tipo == '0'){
        escala = 0.1;
    }
    
    desenhaGrid(dado,escala);        
}

function mostrarDados(data){    
    $("#regiao").text(data[0].regiao);
    $("#estado").text(data[0].estado);
    $("#municipio").text(data[0].municipio);
}

function apagarDados(){    
    $("#regiao").text("");
    $("#estado").text("");
    $("#municipio").text("");
}

function defineCores4CRS(weight){

    context.lineWidth = 1;   
    context.strokeStyle = "#000";
    
    if(weight == 0){
        context.fillStyle = "#FFF";
    }
    if(weight == 1){
        context.fillStyle = "#CFCFCF";
    }
    if(weight == 2){
        context.fillStyle = "#828282";
    }
    if(weight == 3){
        context.fillStyle = "#000";
    }    
}

function configContext(lineWidth,stroke,fill){
        
    context.lineWidth = lineWidth;
    
    if(stroke){
        context.stroke();
    }
    if(fill){
        context.fill();    
    }
}